/** @file
 * Log.h
 *
 *  Created on: 12-03-2012
 *  @author: Kamil Mówiński <xnasterx@gmail.com>
 */

#ifndef LOG_H_
#define LOG_H_

#include <fstream>
#include <ctime>
#include <iostream>
#include <string.h>

/**
 * Klasa zajmująca się archiwizacją wszelkich danych.
 * Do jej zadań należy otwarcie odpowiedniego pliku z dniem odpalenia platformy
 * oraz zapisywanie wszelkich istotnych informacji
 */
class Log {
	/** Tablica przechowująca bierzącą datę lub czas */
	char buf[10];
	/** Strumień wyjściowy w którym zapisywane są logi */
	std::fstream fout;

	/** Prywatna metoda zapisująca do strumienia fout wiadomość przekazaną
	 * jako parametr wraz z datą
	 * @param msg wskaźnik na tekst wiadomości
	 */
	void PutMsg(char * msg);
	/** Metoda zapisująca w tablicy buf bierzący czas w formacie godzina:minuta:sekunda */
	void GetTime(void);
	/** Metoda zapisująca w tablicy buf bierzący dzień w formacie dzień:miesiąc:rok */
	void GetDate(void);
public:
	/** Konstruktor przygotowujący strumień do zapisu.
	 * W razie potrzeby tworzy w katalogu Logs nowy plik z obecną data
	 * a jeśli takowy istnieje dopisuje do końca
	 *
	 * @throw w razie niepowodzenia wyrzuca wyjątek typu std::string z wiadomością o błędzie
	 */
	Log(void) throw (std::string);
	/** Destruktor zamykający plik */
	~Log(void);
	/** Publiczna klasa zapisująca informacje do pliku logującego
	 * @param msg wiadomość do zapisania
	 */
	void Info(const char * msg);
	/** Publiczna klasa zapisująca ostrzeżenie do pliku logującego
	 * @param msg wiadomość do zapisania
	 */
	void Warning(const char * msg);
	/** Publiczna klasa zapisująca błąd do pliku logującego
	 * @param msg wiadomość do zapisania
	 */
	void Error(const char * msg);
};

#endif /* LOG_H_ */
